normal
Zum Hauptinhalt springen

Ankündigungen (News)

info

Ankündigungen informieren Stud.IP-Nutzer über neuste Ereignisse rund um die Lehre. In Stud.IP können Ankündigungen z.B. systemweit (global) oder für einen bestimmten Nutzerkreis erstellt werden.

Schema "news"

Ankündigungen bestehen aus ihrem Inhalt und einigen Meta-Daten. Die Dauer der Sichtbarkeit einer Anküdnigung wird durch ihre Attribute publication-start und end bestimmt (siehe Relationen).

Attribute

AttributBeschreibung
titleName einer news
contentInhalt einer News
mkdateErstellungs-Datum einer News
chdateDatum der letzten Änderung
publication-startStart der Sichtbarkeit für den Nutzerkreis einer News
publication-endEnde der Sichtbarkeit für den Nutzerkreis einer News
comments-allowedBestimmung, ob Kommentare erlaubt sind (Boolean)

Ein Beispiel zum erstellen einer News anhand des Schemas folgt in News anlegen.

Relationen

RelationBeschreibung
authorErsteller einer News
rangesglobal, institute, semester, course, users

Der Range einer News gibt an wo sie publiziert wird und somit auch für wen sie sichtbar ist.

Schema "comments"

Kommentare werden in Stud.IP an eine Ankündigung angehangen, wenn der Ersteller der News die Erlaubnis vergeben hat.

Attribute

AttributBeschreibung
contentInhalt eines Kommentars
mkdateErstellungs-Datum
chdateDatum der letzten Änderung

Relationen

RelationBeschreibung
authorDer Ersteller des Kommentars
newsDie kommentierte News

News anlegen

Das Anlegen einer News ist in verschiedenen Kontexten möglich. Sie kann global als systemweite News, kursintern oder nutzerbezogen angelegt werden.

Eine globale News anlegen

Route

POST /news

Autorisierung

Die Erstellung einer globalen News erfordern zur Zeit noch Root-Rechte. Es wird diskutiert ob hier Adminrechte reichen.

curl --request POST \
--url https://example.com/news \
--header "Content-Type: application/vnd.api+json" \
--header "Authorization: Basic `echo -ne "root@studip:testing" | base64`" \
--data
'{"data": {"type": "news","attributes": {"title": "Neue News","comments-allowed": true,"publication-start": "2020-01-01T12:12:12+00:00","publication-end": "2021-01-01T12:12:12+00:00","content": "Eine neue News sieht das Tageslicht."}}}'

Eine Kurs-News anlegen

POST /courses/{id}/news

curl --request POST \
--url https://example.com/courses/<COURSE-ID>/news \
--header "Content-Type: application/vnd.api+json" \
--header "Authorization: Basic `echo -ne "test_dozent:testing" | base64`" \
--data
'{"data": {"type": "news","attributes": {"title": "Neue News","comments-allowed": true,"publication-start": "2020-01-01T12:12:12+00:00","publication-end": "2021-01-01T12:12:12+00:00","content": "Eine neue News sieht das Tageslicht."}}}'
ParameterBeschreibung
idDie ID des Kurses

Autorisierung

Der Nutzer muss mindestens Dozenten- oder Adminrechte innerhalb des Kurses haben.

Eine Nutzer-News anlegen

POST /users/{id}/news

curl --request POST \
--url https://example.com/users/<USER-ID>/news \
--header "Content-Type: application/vnd.api+json" \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \
--data
'{"data": {"type": "news","attributes": {"title": "Neue News","comments-allowed": true,"publication-start": "2020-01-01T12:12:12+00:00","publication-end": "2021-01-01T12:12:12+00:00","content": "Eine neue News sieht das Tageslicht."}}}'
ParameterBeschreibung
idDie ID des Users

Autorisierung

Der Nutzer muss mindestens User-Rechte haben.

Einen Kommentar anlegen

POST /news/{id}/comments

curl --request POST \
--url https://example.com/news/<NEWS-ID>/comments \
--header "Content-Type: application/vnd.api+json" \
--header "Authorization: Basic `echo -ne "test_dozent:testing" | base64`" \
--data
'{"data": {"type": "comments","attributes": {"content": "Ein Kommentar wurde geupdatet"}}}'

Autorisierung

Der Nutzer muss mindestens User-Rechte haben.

ParameterBeschreibung
idDie ID der News

Eine News ändern

PATCH /news/{id}

ParameterBeschreibung
idDie ID der News

Die Data-Felder beim Update einer News sind optional.

curl --request PATCH \
--url https://example.com/news/<NEWS-ID> \
--header "Content-Type: application/vnd.api+json" \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \
--data
'{"data": {"type": "news","attributes": {"title": "Aenderungen","comments-allowed": true,"publication-start": "2020-01-01T12:12:12+00:00","publication-end": "2021-01-01T12:12:12+00:00","content": "Eine News wurde geaendert."}}}'

Autorisierung

Der Nutzer muss Inhaber der News sein oder die entsprechenden Root-Rechte besitzen.

Eine News ansehen

GET /news/{id}

ParameterBeschreibung
idDie ID der News
curl --request GET \
--url https://example.com/news/<NEWS-ID> \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \

Autorisierung

Der Nutzer muss Inhaber der News sein oder die entsprechenden Range-Rechte besitzen.

Der Request liefert JSON ähnlich wie dieses:

{
"data": {
"type": "news",
"id": "6a8be7e4859e9c781ecc47a2c3498435",
"attributes": {
"title": "A testing title",
"content": "Lorem ipsum dolor sit amet, consectetur adipisicing elit",
"mkdate": "2019-04-23T12:10:26+02:00",
"chdate": "2019-04-23T12:10:26+02:00",
"publication-start": "2019-04-23T12:10:26+02:00",
"publication-end": "2019-05-07T12:10:26+02:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "e7a0a84b161f3e8c09b4a0a2e8a58147"
},
"links": {
"related": "jsonapi.php/v1/users/e7a0a84b161f3e8c09b4a0a2e8a58147"
}
},
"ranges": {
"data": [

],
"links": {
"self": "jsonapi.php/v1/news/6a8be7e4859e9c781ecc47a2c3498435/relationships/ranges"
}
}
},
"links": {
"self": "jsonapi.php/v1/news/6a8be7e4859e9c781ecc47a2c3498435"
}
}
}

Alle Kurs-News

GET /courses/{id}/news

ParameterBeschreibung
idDie ID des Kurses
curl --request GET \
--url https://example.com/course/<COURSE-ID>/news \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \

Autorisierung

Der Nutzer muss mindestens Teilnehmer des Kurses sein.

Der Request liefert JSON ähnlich wie dieses:

{
"meta": {
"page": {
"offset": 0,
"limit": 30,
"total": 4
}
},
"links": {
"first": "/stud35/plugins.php/argonautsplugin/courses/1b7d3834e42c1569947e0eab7b63ed19/news?page%5Boffset%5D=0&page%5Blimit%5D=30",
"last": "/stud35/plugins.php/argonautsplugin/courses/1b7d3834e42c1569947e0eab7b63ed19/news?page%5Boffset%5D=0&page%5Blimit%5D=30"
},
"data": [
{
"type": "news",
"id": "9dc34d7414e9d6c2789923649a64673e",
"attributes": {
"title": "Fakenews",
"content": "This is fakenews232",
"mkdate": "2018-06-20T10:40:43+02:00",
"chdate": "2018-06-20T10:57:37+02:00",
"publication-start": "2018-06-21T12:00:00+02:00",
"publication-end": "2066-12-09T22:00:00+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "courses",
"id": "1b7d3834e42c1569947e0eab7b63ed19"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/9dc34d7414e9d6c2789923649a64673e/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/9dc34d7414e9d6c2789923649a64673e"
}
},
{
"type": "news",
"id": "0e8df7da383d7515c4dc081bfe889897",
"attributes": {
"title": "Fakenews",
"content": "This is fakenews232",
"mkdate": "2018-06-19T16:08:51+02:00",
"chdate": "2018-06-20T09:50:02+02:00",
"publication-start": "2018-06-19T16:08:51+02:00",
"publication-end": "2066-12-05T15:08:51+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "courses",
"id": "1b7d3834e42c1569947e0eab7b63ed19"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897"
}
},
{
"type": "news",
"id": "191ce64590a28b3e038b09e85ea53178",
"attributes": {
"title": "Fakenews",
"content": "This is fakenews",
"mkdate": "2018-05-08T11:42:11+02:00",
"chdate": "2018-05-08T11:42:11+02:00",
"publication-start": "2018-05-08T11:42:11+02:00",
"publication-end": "2066-09-19T20:24:22+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "courses",
"id": "1b7d3834e42c1569947e0eab7b63ed19"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/191ce64590a28b3e038b09e85ea53178/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/191ce64590a28b3e038b09e85ea53178"
}
},
{
"type": "news",
"id": "a355b8d628d8656eb93dc527fe1209f3",
"attributes": {
"title": "Fakenews",
"content": "This is fakenews",
"mkdate": "2018-05-08T11:35:56+02:00",
"chdate": "2018-05-08T11:35:56+02:00",
"publication-start": "2018-05-08T11:35:55+02:00",
"publication-end": "2066-09-19T20:11:50+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "courses",
"id": "1b7d3834e42c1569947e0eab7b63ed19"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/a355b8d628d8656eb93dc527fe1209f3/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/a355b8d628d8656eb93dc527fe1209f3"
}
}
]
}

Alle Nutzer-News

GET /users/{id}/news

ParameterBeschreibung
idDie ID des Nutzers
curl --request GET \
--url https://example.com/user/<USER-ID>/news \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \

Autorisierung

Der Nutzer muss mindestens eingeloggt sein oder über Root-Rechte verfügen.

Der Request liefert JSON ähnlich wie dieses:

{
"data": {
"type": "news",
"id": "0e8df7da383d7515c4dc081bfe889897",
"attributes": {
"title": "Neue News",
"content": "Eine neue News sieht das Tageslicht.",
"mkdate": "2018-06-19T16:08:51+02:00",
"chdate": "2018-08-15T14:22:38+02:00",
"publication-start": "2018-06-19T16:08:51+02:00",
"publication-end": "2066-12-05T15:08:51+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "users",
"id": "1b7d3834e42c1569947e0eab7b63ed19"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897"
}
}
}

Alle News-Kommentare

GET /news/{id}/comments

ParameterBeschreibung
idDie ID einer News

Alle globalen News

GET /studip/news

curl --request GET \
--url https://example.com/user/studip/news \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \

Autorisierung

Der Nutzer muss mindestens eingeloggt sein oder über Root-Rechte verfügen.

Der Request liefert JSON ähnlich wie dieses:

{
"data": {
"type": "news",
"id": "0e8df7da383d7515c4dc081bfe889897",
"attributes": {
"title": "Globale News",
"content": "Eine neue News sieht das Tageslicht.",
"mkdate": "2018-06-19T16:08:51+02:00",
"chdate": "2018-08-15T14:22:38+02:00",
"publication-start": "2018-06-19T16:08:51+02:00",
"publication-end": "2066-12-05T15:08:51+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "global",
"id": "studip"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897"
}
}
}

Alle News des aktuell eingeloggten Nutzers abrufen

GET /news

curl --request GET \
--url https://example.com/news \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \

Autorisierung

Der Nutzer muss mindestens eingeloggt sein oder über Root-Rechte verfügen.

Der Request liefert JSON ähnlich wie dieses:

{
"data": {
"type": "news",
"id": "0e8df7da383d7515c4dc081bfe889897",
"attributes": {
"title": "Neue News",
"content": "Eine neue News sieht das Tageslicht.",
"mkdate": "2018-06-19T16:08:51+02:00",
"chdate": "2018-08-15T14:22:38+02:00",
"publication-start": "2018-06-19T16:08:51+02:00",
"publication-end": "2066-12-05T15:08:51+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "users",
"id": "1b7d3834e42c1569947e0eab7b63ed19"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897"
}
}
}

Eine News löschen

DELETE /news/{id}

ParameterBeschreibung
idDie ID der News

Authorisierung

Diese Route kann nur vom Nutzer der betreffenden Nachrichten genutzt werden.

curl --request DELETE \
--url https://example.com/news/<NEWS-ID> \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \

Autorisierung

Der Nutzer muss mindestens eingeloggt sein oder über Root-Rechte verfügen.

Einen Kommentar löschen

DELETE /comments/{id}

ParameterBeschreibung
idDie ID eines Kommentars
curl --request DELETE \
--url https://example.com/comments/studip/news \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \

Alle News-Ranges

GET /news/{id}/relationships/ranges

see http://jsonapi.org/format/#fetching-relationships

News-Ranges setzen

PATCH /news/{id}/relationships/ranges

see http://jsonapi.org/format/#crud-updating-to-many-relationships

News-Ranges hinzufügen

POST /news/{id}/relationships/ranges

see http://jsonapi.org/format/#crud-updating-to-many-relationships

News-Ranges löschen

DELETE /news/{id}/relationships/ranges

see http://jsonapi.org/format/#crud-updating-to-many-relationships